package com.dongzili.pdffill.controller;

import com.dongzili.pdffill.utils.FillPdfUtil;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;

/**
 * @描述：
 * @作者： 96511
 * @日期： 2024-05-25 10:30
 */

@RestController
@RequestMapping
public class DemoController {


    public static final DateTimeFormatter dateFormat = DateTimeFormatter.ofPattern("yyyy-MM-dd");
    public static final DateTimeFormatter datetimeFormat = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");

    public final static String filePath = "file/pdf/";
    public final static String tempPdfPath = "template/templatepdf.pdf";
    @GetMapping("pdf/preview/{template}")
    public ResponseEntity<byte[]> pdfPreview(@RequestParam Map<String, String> map, @PathVariable("template") String template) throws IOException {

        System.out.println(template);
        System.out.println(map);
        String fileName = LocalDateTime.now().format(dateFormat)+"-"+UUID.randomUUID()+".pdf";
        String pdfOutPath = filePath + fileName;
        File dictionary = new File(filePath);
        if(!dictionary.isDirectory()){
            //递归生成文件夹
            dictionary.mkdirs();
        }

        // 字体扩展包地址（根据实际位置修改）
        String extendPath = "D:\\fonts\\";
        // 参数准备
        // 生成
        // 基于字体扩展包，自动匹配已有字体
        FillPdfUtil fillPdfUtil = new FillPdfUtil(true, extendPath);
        fillPdfUtil.fill(tempPdfPath, pdfOutPath, map);


        Path imagePath = Paths.get(pdfOutPath);
        byte[] imageBytes = Files.readAllBytes(imagePath);

        HttpHeaders headers = new HttpHeaders();
//        headers.setContentType(MediaType.APPLICATION_PDF); // 设置正确的图片类型
        headers.setContentType(MediaType.APPLICATION_PDF);

        return ResponseEntity.ok()
                .headers(headers)
                .body(imageBytes);
    }


    public static Map<String, String> getData(){
        Map<String, String> map = new HashMap<>();
        String jobResume = """
                1、先去建一个Word文件，设置好想要填充的地方，留好位置，设置好下划线
                2、将Word另存为pdf
                3、打开电脑中的Adobe Acrobat pro DC（这个应该win10 都有，搜索一下就出来了），点击 文件→创建→创建表单
                4、然后导入刚刚生成的pdf
                会出来这个页面
                双击这个阴影部分，将名称改成你要设置的名称，后面要根据这个名称来给他赋值
                全部设置好以后就可以另存为了
                5、前期的pdf模板准备好了，就开始上代码！
                1、首先导入我们所需要的依赖
                2、上代码
                3、字体需要放在resources目录下
                6、开始测试
                7、看看效果
                ok，非常完美！
                如果觉得这种pdf模板的方式不好，可以参考我的另一篇博文，可以不用设置pdf模板就直接生成pdf
                itext5固定段落Paragraph，指定段落位置
                问题总结
                """;
        map.put("name","老王");
        map.put("sex","男");
        map.put("birthday","2000-01-01");
        map.put("jobResume", jobResume);

        return map;
    }
}
